面试官:如何在千万级数据中查询 10W 的数据,都有什么方案? |
您所在的位置:网站首页 › es 性能 › 面试官:如何在千万级数据中查询 10W 的数据,都有什么方案? |
![]() ![]() ![]() 作者:变速风声 链接:https://juejin.cn/post/7104090532015505416 前言在开发中遇到一个业务诉求,需要在千万量级的底池数据中筛选出不超过 10W 的数据,并根据配置的权重规则进行排序、打散(如同一个类目下的商品数据不能连续出现 3 次)。 下面对该业务诉求的实现,设计思路和方案优化进行介绍,对「千万量级数据中查询 10W 量级的数据」设计了如下方案 多线程 + CK 翻页方案 ES scroll scan 深翻页方案 ES + Hbase 组合方案 RediSearch + RedisJSON 组合方案 初版设计方案整体方案设计为: 先根据配置的「筛选规则」,从底池表中筛选出「目标数据」 在根据配置的「排序规则」,对「目标数据」进行排序,得到「结果数据」技术方案如下: 每天运行导数任务,把现有的千万量级的底池数据(Hive 表)导入到 Clickhouse 中,后续使用 CK 表进行数据筛选。 将业务配置的筛选规则和排序规则,构建为一个「筛选 + 排序」对象 SelectionQueryCondition。 从 CK 底池表取「目标数据」时,开启多线程,进行分页筛选,将获取到的「目标数据」存放到 result 列表中。 //分页大小 默认 5000 int pageSize = this.getPageSize(); //页码数 int pageCnt = totalNum / this.getPageSize() + 1; List result = Lists.newArrayList(); List futureList = new ArrayList(pageCnt); //开启多线程调用 for (int i = 1; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |